Страницы

Поиск по вопросам

среда, 15 апреля 2020 г.

Актуальна ли сейчас такая фишка?

#jquery #дизайн

                    

Делал свежий дизайн, с использованием jQuery, решил дать полную свободу юзеру, и
замутил блок управления отображением сайта, увеличение шрифта, цветовые схемы, убираю
сайдбар, фоновую картинку меняю. Но мне сказали, что это глупо и совсем не модно сейчас,
это не актуально и никто не будет пользоваться блоком, главное простота, а не юзабилити.
Блок выезжает из-за угла по событию hover и не мешает в принципе, единственная трудность
- это редактировать каждую тему при каких-либо изменениях в основной.

Идея пришла после прочтения

[данной статьи](http://www.w3school.ru/blog/design-showcase/style-switchers-are-back-ideas-examples.html)
За рубежём почему-то это не осуждают, и основным применением это пользуется именно
в домашних страничках и дизайн студиях, чтобы "показать свою власть над стилем" =)



Что скажете?



    


Ответы

Ответ 1



В такой фишке есть смысл на больших порталах, типа yandex, google, yahoo, которыми люди пользуются каждый день, и следовательно в настройке которых на свой вкус есть смысл. Но в любом случае это не должна быть какая-то выезжающая панель, а как максимум ссылка типа "Настроить внешний вид сайта".

Ответ 2



А какой смысл? По сути функциональности сайту это не добавляет (имхо, кастомизировать отображение сайта, действительно, вряд ли кто-то будет, так чисто попробовать раз). А вот где бы это было действительно полезно, так это на специализированном портале с направлением в верстку, или дизайн, или еще куда. Когда появляется именно цель использования, отличная от "чтобы поиграться". Иначе это просто слишком перегруженные наворотами дизайн. Зато как ваша личная фишка, этот блок мог бы иметь место! Только размером поменьше, или использованный для других целей (например, доступ к "быстрым настройкам" вашего сайта, но только не внешнего вида, хотя кое-что и здесь не исключено), имхо. А еще я не понимал людей, которые везде кричат, что это не модно или глупо.

Ответ 3



считаю,что имеет смысл сделать изменение шрифта,для плоховидящих,и сброс всего твоего придуманного дизайна на "дефолтный минимализм",где черным по белому и без всяких свистелок и п..ок,например тебе нравится одна цветовая гамма,но есть люди у которых эти цвета либо совсем не воспринимаются ,так называемая - цветовая слепота,либо просто раздражает этот цвет.

Ответ 4



Просто эта панель — перебор. Шрифт делается больше меньше нажатием Ctrl++ или колесико мыши, работает в любом браузере, и это то, что пользователь пойдет делать первым делом, а не искать панель. Так что лучше проверьте, что бы сайт скейлился нормально, и ничего никуда не вылазило. На сайдбар вешается маленькая стрелочка в верхнем углу скрывающая и раскрывающая его как в картах google, и то, это нужно далеко не всегда. Темы если и прикручивать, то это как правило небольшие цветовые схемы, перегружающие маленький кусочек стилей, типа: бекграунд шапки, цвет фона и линков. Все. Координально менять интерфейс ни в коем случае не стоит.

Ответ 5



Бессмысленная фигня. Если вы не можете сделать нормальный дизайн к сайту - это вам минус. Давать юзеру его изменять это верх глупости. Максимум можно дать несколько тем на выбор. А так вы просто захламляете сайт лишним функционалом. Это все равно что в терминале сделать возможность слушать музыку через наушники.

Ответ 6



Не слушайте никого, делайте эту фишку, но не как основную в вашем сайте. Очень маленькую и незаметную, и никогда не делайте ее выезжающей откуда-то, а то это смотрится как реклама. Если очень хочется - сделайте одну кнопочку маленькую, а в самом разделе можно даже так сделать: http://jqueryui.com/themeroller/

Максимальное количество символов в атрибуте alt у <img>?

#html #css

                    
Какое максимальное количество символов можно добавить в атрибут alt у метки ?
    


Ответы

Ответ 1



В HTML 4 стоит ограничение в 64Кб: http://www.w3.org/TR/REC-html40/sgml/sgmldecl.html . В HTML 5, похоже, то же самое.

Авторские права.

#права #лицензирование

                    
Если я в части своего проекта использую кусок кода, взятый из свободного доступа
(без указания на него лицензии) то нарушил ли я какие-либо установленные законом рамки? 
Или должен ли я указать в своем проекте автора, чей кусок кода я взял? 
И имеет ли он право требовать с меня обязательного указания своего соавторства (если,
в том месте где я брал код не было явно указано его авторство)? 
Может ли он потребовать убрать не использовать его наработки? 
Как можно доказать свое авторство, на код, свободно размещенный в интернете? 
Если мой код, очень поход на код какого-то разработчика, и он выражает свое недовольство? 
Как быть в этом случае? 
Как понять где начинаются и заканчиваются рамки авторского права, относительно исходного
кода?    


Ответы

Ответ 1



Если код просто выложен на сайт без лицензии, то вы не можете использовать его никак, кроме как просто читать: авторские права остаются за автором кода, и только он может определять, что с его кодом можно делать. Полностью определять. Таким образом, если автор захочет, он может потребовать, чтобы вы указали его соавтором; а может потребовать, чтобы не указывали; также он может запретить использовать свой код (например, сказав, что код выложен только в обучающих целях). Всё в руках автора. Если код выложен без лицензии, это означает, что автор просто не удосужился сообщить свои условия использования кода, а вовсе не то, что код можно использовать на ваше усмотрение. Обратитесь к автору за разъяснением. Существует понятие "общественного достояния" (public domain), что означает, что автор отказывается от своих прав на код, и любой может делать с этим кодом всё, что хочет. Но в таком случае это должно быть явно написано на сайте. Кстати, насколько я знаю, в России нельзя отказаться от авторских прав, то есть нельзя передать своё творение в общественное достояние - оно может стать общественным достоянием только через 70 лет после смерти автора. В любом случае, если лицензия кода не указана, стоит обратиться к автору напрямую, и узнать условия использования его кода. Если ваш проект серьёзный и большой, то эти условия желательно ещё и юридически оформить, чтобы не было проблем в дальнейшем. Насчёт похожих кодов, и "где начинаются и заканчиваются рамки". В некотором роде философский вопрос. Здесь, на мой взгляд, ничего нельзя сказать, кроме следующего циничного высказывания: в суде доказать можно всё, что захочешь, если есть адвокаты и деньги. Некоторые пытаются прочитать закон сотню раз, чтобы понять великую идею, которая была в нём заложена, и затем логически непротиворечиво вывести эти самые рамки. Законодатели пытаются упомянуть в законе все возможные случаи, которые только могут быть (а авторы программ пишут огромные тексты лицензий, где написано всё на все случаи жизни) - и всё равно и те, и другие что-нибудь просмотрят, и получится зацепка, с помощью которой можно будет толковать закон/лицензию неоднозначно. Идеализированные представления об авторском праве, защите интеллектуальной собственности и вообще, о праве, на мой взгляд, не имеют никакой рациональной основы, и противоречат сами себе. (Анархизм, да; и вообще спорный вопрос, поэтому не буду продолжать). Поэтому: не полагайтесь на ваше суждение о вещах, которые автор умолчал - напрямую спросите его об этом; юридически оформляйте всё, что только можно; имейте деньги и адвокатов.

Ответ 2



Ключевые слова: свободный доступ, отсутствие лицензии. Доказать то, что это его код он не сможет ни коим образом. Код у нас пока не патентуется. Но с моей точки зрения, указывать или нет его в авторах это дело вашей совести.

Какие проекты можно создать на monotouch?

#mono #monotouch #monodroid #c_sharp

                    
Доброго времени суток. Хотелось бы узнать возможно ли с помощью mono создать полноценные
игры, приложения для мобильных устройств? Или это лишь затравка для создание просты
приложений? Возможно ли с помощью mono делать полноценные игры с физикой и анимацией?
Если да, то как это делается.. Например openGl, что то похожее на XNA? Если можно со
ссылками.    


Ответы

Ответ 1



Есть MonoGame(Бывший XnaTouch), есть аналогичный ExEn, тоже еще одна реализация Xna под MonoTouch. А самое интересное, скоро должен выйти DeltaEngine, очень крутой движок покрывающий практически все платформы.

Как получить URL посещённых ресурсов?

#javascript #chrome_extension

                    
Всем привет.
Идея следующая: есть расширение Chrome, оно передаёт все посещённые URL на сервер,
каждый пользователь имеет свой id. Можно, конечно, использовать Историю браузера, но
этот подход не гибкий. Каким образом можно реализовать подобное? Интересует коллегиальное
решение, как общая концепция, так и технологии для реализации. Сам Java и  С++ developer,
в WEB только въезжаю, поэтому, может, вопрос глуповат-). Но прошу отнестись с пониманием.
Спасибо.
PS Это не инструмент слежки, необходимо для исследования.    


Ответы

Ответ 1



Можно, конечно, использовать Историю браузера, но этот подход не гибкий. Вполне гибкий. Хром предоставляет специальный API для работы с историей просмотров - это chrome.history. Там же есть ссылка на пример работы с API. Можно создать расширение, которое будет работать всегда, когда запущен Хром, и периодически (скажем, раз в день) в определенное время извлекать историю просмотров, прошедших с последней активации расширения, анализировать их и отсылать данные на сервер.

Ответ 2



Как вариант - опять же расширение для хрома которое будет при каждой загрузке страницы отправлять серверу текущий урл и id пользователя (id можно хранить в localStorage). На сервере анализировать урл и писать его в базу привязывая к пользователю с указанным id.

Оптимизация php и mysql

#php #оптимизация #mysql

                    
И опять вопросы по работе с mysql и php:
1) Есть два запроса:
mysql_query('select * from `table` where `id`='.$id.' and `user_id`='.$_SESSION['id']);
mysql_query('select * from `table` where `id`='.$id.' and `user_id`='.$_SESSION['id'].'limit
0, 1');

Первичный ключ - id. Имеет ли смысл писать limit 0, 1 в конце запроса или это не
ускорит запрос?
2) В случае уже полученных данных:
$ar = array();
$res = mysql_query('select * from `table` where `id`<30');
while($ar = mysql_fetch_assoc($res)){}

Что лучше использовать: mysql_num_rows($res) или sizeof($ar) ?
3) Зачем нужен mysql_fetch_array, если есть mysql_fetch_assoc и mysql_fetch_row?
По идее, эти две функции по отдельности работают быстрее?
4) При организации, допустим, блогов, разумно ли вынести посты блогов в отдельные
файлы, а комментарии оставить в БД? Просто тогда получается, что при выводе последних
блогов одновременно будет вестись работа как с БД, так и с файлами, что мне не нравится.
Тем более, что анонс все равно придется писать в БД.
5) Определение глобальных переменных в функции - довольно медленная вещь. Можно ли
ускорить работу функции, загнав ссылки на нужные переменные в массив и определив в
функции глобальным только новый массив? То есть, было:
function f() {
    global $ar1, $ar2, $ar3;
}

Стало:
$all = array('ar1' => &$ar1, 'ar2' => &$ar2, 'ar3' => &$ar3);
function f() {
    global $all;
    $ar1 = $all['ar1'];
}

Если целесообразность некоторых вопросов у вас вызвала недоумение, считайте, что
я любитель экономить на спичках.    


Ответы

Ответ 1



1) Имеет смысл сделать так: mysql_query('select * from `table` where `id`='.$_SESSION['id'].' limit 0,1'); Только исключите в запросах *, тогда будет экономия уже не на спичках :) 2) Согласен с @mozzart 3) mysql_fetch_array работает быстрее, чем assoc, т.к. добавляет только индексы в массив. 4) Согласен с @mozzart 5) Скорее вот так быстрее: function (&$ar1, &$ar2, &$ar3) { ... } Пример: class Api { private $db; public function test() { // Этой функции Вы собирались передать get и post $this->db; // объект бд } } или так: class Api extends DB { public function test() { $this->query(); } } class DB { public function query() { ... } }

Ответ 2



1) Смысл есть 2) Если нужно просто получить количество записей, то логичнее и оптимизированней использовать mysql_num_rows, если все записи получены в массив, то тогда конечно - sizeof 3) Не проверял... 4) Если хранение файлов подразумевает организацию кэширование, то тогда да. Грубо говоря, работа с файлами происходит намного быстрее чем с БД 5) Первый вариант быстрее

Оптимизация алгоритма вычисления “разности” списков IP-диапазонов

#алгоритм #java

                    
Здравствуйте!
Понятия

IPAddressRange - Диапазон IP-адресов, задан в виде network/mask или ipFirst, ipLast
(но в итоге все равно приводится ко второму виду). Так же подразумевается, как некоторое
множество (совокупность) последовательных (упорядоченных) чисел (числовая интерпретация
IP-адресов), заданная двумя значениями, первым и последним из диапазона (прощу прощения
за сложное пояснение)
List - Список IP-диапазонов (множеств)

Что имеем:

Список IP-диапазонов - база
Список IP-диапазонов - исключения
Функция выполняющая вычитание множеств и возвращающая ноль, один или два диапазона
Язык программирования - Java

Что нужно сделать:
Из первого списка вычесть все вхождения второго списка (т.е. обычная разность множеств),
алгоритм составлен (но еще не реализован), базовые классы и методы для реализации имеются. 
Примерно алгоритм выглядит так:

Выбираем последовательно элементы из списка исключения
Для каждого элемента из списка база проверяем, входит ли выбранный элемент списка
исключения в множество (сравниваем границы)
Если не входит - добавляем во временный список элемент из база
Если входит - выполняем разность множеств
"Отработавший" элемента списка база заменяется на новый(е) (два случая рассматривается:
границы элемента из исключения больше или равны границам элемента из база (получаем
0 (обе границы - >=) или 1 (одна из границ - >=) новый элемент), границы элемента из
исключения < границ элемента из база (получаем 2 новых элемента))
Новые элементы добавляются во временный список
Элемент списка исключения удаляется, когда пройдет все элементы списка база, элементы
из временного списка переносятся в список база, процедура повторяется

Хотелось бы оптимизировать мое решение, открыт для идей и наставлений.    


Ответы

Ответ 1



Разделить IPv4 и IPv6 интервалы и обрабатывать их отдельно Надо понимать, что каждый конец интервала - это просто long числа. Предположим, у нас есть реализация для получения такого числа для любого из концов. Предполагаем, что интервалы заданы верно (first <= last) Сортируем списки интервалов по их началам как long числам Идём по спискам по порядку по обоим спискам. Почти как в известной задачке про книги на полках и попутно строим третий список. Не забываем о возможности пересечений соседних интервалов в обоих списках. Сложность зависит от типа применяемой сортировки, но она будет лучше, чем M * N в случае, если M и N достаточно велики (понятно, что если списки 3 на 2, то быстрее будет просто всех со всеми сравнить).

Ответ 2



Как обещал в своем комментарии подумал. @cy6erGn0m в своем ответе (на мой взгляд) оптимальный алгоритм описал. Плюс к этому я обязательно добавил бы после сортировки диапазонов списка (п. 4 у @cy6erGn0m) СЛИЯНИЕ пересекающихся диапазонов. Это проводится за один проход списка и может сильно сократить его размер (вплоть до одного элемента, как в Вашем комментарии: "база" - 0.0.0.0 - 255.255.255.255 и 10.10.10.0 - 10.10.10.255). Более того (как мне кажется) реализация п.5 тоже станет проще. Далее за один параллельный проход обоих списков из множества базы исключаем элементы множества исключений. Количество операций можно оценить в N*log(N) + M*log(M) + M + N + m + n (m, n - количество диапазонов после слияния).

Кеширование в Django

#python #django

                    
Не получается закешировать данные.
Делаю так (ctype.id=158, objects=[данные в QuerySet формате]):
from django.core.cache import cache
cached_objects = cache.get('top_rating_%s'%ctype.id)   #вынимаем из кеша
if cached_objects is None:  #Если кеш пуст, то...
  #Тут манипуляция данными
  cache.set('top_rating_%s'%ctype.id, objects, time=1800)  #Кладем в кеш значение objects
  return objects #Возвращаем objects
else:
  return cached_objects #Возвращаем значение из кеша

Пробовал перевести данные из типа QuerySet в list:
...
objects = list(objects) #Преобразую
cache.set('top_rating_%s'%ctype.id, objects, time=1800) #Кладу в кеш
...

В обоих случаях в кеш ничего не сохранялось.
Для проверки пробовал просто положить в кеш строку, все отлично сработало, в кеше
значение прожило ровно столько, сколько указал во времени жизни.    


Ответы

Ответ 1



Кеш он глупый, умеет хранить только базовые типы данных. Поэтому сложные структуры которые зависят от классов или типов указанных в приложении нужно сериализовать перед записью в кеш и десериализовать после. Сериализация объектов в Django Также можно воспользоваться модулем pickle

Ответ 2



Видимо, все зависит от бэкенда, т.к. за сериализацию данных каждый бэкенд отвечает сам. К примеру, с memcache, приведенный выше код, должен работать, т.к. memcache не скалярные данные сериализует при помощи pickle. UPD. Проверил на django 1.3, python 2.7 - все бэкенды используемые в django автоматически сериализируют объекты, т.ч., видимо, у вас где-то ошибка.

Регулярное выражение для получения содержимого между тегами tr

#php #регулярные_выражения

                    
Здраствуйте, подскажите регулярное выражение для получения содержимого между тегами
tr /tr, с помощью preg_match_all, между ними могут встречаться все символы, кроме вышеуказаных
тегов, символов неопределенное количество (от 1 до бесконечности).
И если это возможно, то и в случае если между ними могут быть размещены таблицы (т.е.
могут существовать теги tr /tr).    


Ответы

Ответ 1



PHP, регулярные выражения. Извлечение строк между тегами.

Ответ 2



Честно говоря, не силён в этом, но мне кажется как-то так... if (preg_match('|(.*)|sei', $str, $arr)) $tr = $arr[1]; else $tr='';

Android: root-доступ программно

#android #java

                    
Собственно вопрос: кто-нибудь смог получить права root на девайс программно?
Я видел скрипт на sh, с которым еще возиться и возиться, и это все что нагуглилось.
Видимо подобные вещи не афишируются и все же интерес огромный, ибо порой полезно, особенно
для написания системных тулз.    


Ответы

Ответ 1



Вы не смотрели пример DeviceAdmin из API Demos? Там для получения используется получение прав администратора через специальный диалог. Я точно не знаю то ли это, что вам нужно, но думаю может пригодиться ... В доках также пишут что есть возможность получить такие права, начиная с Android 2.2

Ответ 2



Получение привилегий делается через вызов системной программы su (например с помощью функции system или exec). В рутованный телефон эта программа устанавливается с suid-битами. Если взять данную программу из cyanogenmod, она предварительно спрашивает у пользователя, хочет ли он наделить привилегиями вызвавшее её приложение. Пример вызова из java: https://stackoverflow.com/a/8750977/1566316

Сервер с JSON API. Как сделать правильно и безопасно.

#json #безопасность #шифрование

                    
Я хочу сделать сервер, который будет отдавать данные в формате JSON. (Как например
у Github.com).
Но проблема в том, что мне необходимо защитить передаваемые данные от перехвата.
Кроме того доступ к некоторым возможностям будет выборочным. (Т.е. нужна аутентификация
и авторизация).
Как это сделать? Можно использовать любые технологии, но желательно не слишком маргинальные.    


Ответы

Ответ 1



Авторизация по сложным паролям-токенам (средствами вашего кода) + HTTPS средствами apache+mod_ssl. Естественно, если клиент - браузер рядового пользователя - потребуется валидный сертификат. Если же использовать нешифрованный протокол - то можно пытаться защитить авторизацию через хеш на клиенте и рендомную "соль". Опять таки - все зависит от клиента. Если это браузер - решение должно быть максимально стандартным. Если коммутация сервер-сервер - тогда что угодно, вплоть до v3 SSL auth(обмен сертификатами).

Как сделать генератор случайных чисел, выдающий одинаковые значения при нескольких запусках?

#javascript #алгоритм #случайные_числа

                    
Посоветуйте, как сделать псевдослучайный генератор, иницилизирующийся числом, с помощью
которого можно сгенерировать последовательность чисел (несколько тысяч чисел от 0 до
9). Основная задача чтобы при запуске этого же генератора с таким же числом инициализации
он выдавал те же самые значения.    


Ответы

Ответ 1



Простейший вариант: var num; // очень большое простое число. var seed; // затравка - то самое инициализирующее число. var start_number; // основа var counts = new Array(); var max_num = 10; // Инт, который не превосходит наше число. У вас 0-9 числа. for(var i=0; i<1000; i++){ counts[i] = (Math.pow(start_number+i,seed)%num)%max_num; } Механизм простой: возводим основу, изменяемую каунтером в степень затравки и берем остаток от деления на большое число. Потом берем последние несколько цифр(в нашем случае - одну). Как можно оптимизировать: бинарное возведение в степень(пользуясь тем, что у нас кольцо) Замечания: 1) num должен быть достаточно большим, чтобы обеспечить разнообразие. 2) число в степени затравки должно, тем не менее, превосходить это простое число. 3) от основы можно отказаться вовсе, если счет инкрементора начинать с 2, а seed взять, хотя бы, от ~20

Ответ 2



И ведь не надоедает людям изобретать не то что велосипеды, но даже лапти... Линейный конгруэнтный метод.

Ответ 3



Вопрос успешно обсуждался на оригинальном SO: https://stackoverflow.com/questions/424292/how-to-create-my-own-javascript-random-number-generator-that-i-can-also-set-the-s

Книга по OpenGL [закрыт]

#книги #opengl

                            
             
                
                    
                        
                            Закрыт. На этот вопрос невозможно дать объективный ответ.
Ответы на него в данный момент не принимаются.
                            
                        
                    
                
            
                    
                
                        
                            
                        
                    
                        
                            Хотите улучшить этот вопрос? Переформулируйте вопрос,
чтобы на него можно было дать ответ, основанный на фактах и цитатах, отредактировав его.
                        
                        Закрыт 4 года назад.
                    
                
        

Подскажите пожалуйста более-менее актуальную книгу по OpenGL желательно чтобы там
была расписана работа с шейдерами и их встраивание в приложение , можно C++ или Java    


Ответы

Ответ 1



Довольно доходчиво изложены основы OpenGL в этой книге. По шейдерам лучше отдельную книгу читать, например эту: "OpenGL. Трехмерная графика и язык программирования шейдеров. Для профессионалов" А ещё тут есть несколько полезных уроков. А вообще, я бы порекомменодовал Вам пользоваться XNA 4 + с#. Но выбор, в основном, зависит от целей Вашего проекта.

Ответ 2



Есть ещё OpenGL суперкнига. Последнее переведённое на русский 3-е издание. Там описывается OpenGL 2.0. Я думаю, что его возможностей вполне хватит. Если же нет, то читай 5-е издание на английском. Там уже есть OpenGL 3.x.

Ответ 3



OpenGl red book - больше справочная OpenGl orange book - шейдеры OpenGl blue book - туториалы OpenGl insights - особенности, которых часто нет в документациях желательно, начиная с 3.2, потому что ранние уже не актуальны.

SSH server на Android

#android #ssh #сервер

                    
Можно настроить ssh сервер на андроиде? Как?    


Ответы

Ответ 1



Можно установить приложение из Android Market: SSHDroid, которое реализует SSH-сервер для Android-телефона. Приложение сделано на основе Dropbear SSH.

Как сделать iframe с динамической высотой, задаваемой внутренним содержимым самого фрейма

#html #css #iframe

                    
Добрый день. Как известно iframe кушает лишь четкие указания height в px, а нужно
что-бы вставляемый iframe растягивал родительский элемент, в зависимости от размера
содержимого самого iframe, т.к. содержимое - динамическое. Кто знает какие решения,
простые или сложные (JS, JQ и т.д.)?    


Ответы

Ответ 1



Скрипт вставлять в тот документ который загружается в iframe, не забудьте также подключить в этот файл jQuery (проверял на 1.6.2) Посмотрите еще вот это - http://host.sonspring.com/iframe/

Ответ 2



Работает, но если содержимое больше высоты монитора, то устанавливается высота которая видна, если бы я открыл этот Iframe в отдельном окне.

Убрать отображение полос прокрутки

#html #css

                    
У меня есть небольшой блок и полосы прокрутки к нему. Надо чтобы полосы прокрутки
работали (колесом крутить если), а сами полосы не были видны. hidden убирает их, но
работоспособность также проходит.
    


Ответы

Ответ 1



Что бы блок прокручивался - а полос не было - это нужно внедрять жску. Есть много плагинов, которые скрывают полосы прокрутки, но сам скол работает. А средствами ксс - не видел такого еще. Вот один из них slimscroll

Ответ 2



в css ::-webkit-scrollbar { visibility: hidden; width: 0px; }

Размещение созданной БД SQLite в проекте под Android

#android #java #sqlite #база_данных

                    
Здравствуйте. Пишу небольшой справочник, в основе которого будет база данных. Файл
БД создан на стороне средствами специального ПО. Данный файл нужно подгрузить в приложение
Android. Каким образом размещать файл, каков путь для доступа к внедряемой БД, какие
методы следует реализовать для обеспечения подключения и дальнейшей работы с данной
БД в приложении?    


Ответы

Ответ 1



Если ещё не читали, то будет полезна статья на Хабре «Правильная работа с БД в Android». Там же есть ссылка на тему прикрепления БД. Сам давно уже использую этот подход. Меня устраивает. Обсуждение тонкостей также производилось в вопросе «Правильная работа с SQLite-базой в Android».

Ответ 2



Базу на флешку. В приложении сделать выбор пути к базе.

Как делают программы с интерфейсом Windows XP SP3, Vista, 7 и т.д.?

#windows #vista #visual_basic

                    
Я очень хотел делать программы с интерфейсом Windows, с трудом нашёл Visual Basic
и каково было моё разочарование, когда я узнал, что там кнопки (и другой интерфейс)
какие-то 2d-шные (как Chemax) и под Windows 98, NT, и другие дряхлые системы. А это
не то, что я хочу! Подскажите, на каком языке (в какой среде) делают приложения с интерфейсом
Windows XP, Vista, 7, и другие современные, в которых интерфейс зависит от темы и кнопки.
Короче, такие как Kaspersky Norton Win Doctor и т.д. и где взять учебники и как это
делать лучше? Пожалуйста, поподробнее.    


Ответы

Ответ 1



Это небось VB6? Помню, было такое дело. Рядом с ЕХЕ-шником кладите файл ИМЯEXE.manifest примерно следующего содержания: Windows Shell ВАЖНО. Все ocx-контролы (и dll)? которые используются для создания интерфейса (при добавлении которых появляются всякие списки, тривью (treeview)) должны быть не ниже версии 6.0. Пояснение: такой ЕХЕшник нельзя собрать на ОС ниже ХР. Или более продвинутый вариант - ставить Visual Studio 2003 и выше. Там это включается опцией в настройках формы и одной командой глобального объекта Application.

Игра нарды на Java

#java #алгоритм #разработка_игр

                    
Здравствуйте! Подскажите, можно ли написать игру нарды в настольном приложение! Подскажите,
как в java создать доску, фишки и камни для игры?
Опишите, пожалуйста, алгоритм игры нарды или дайте ссылку по разработке игры нарды?    


Ответы

Ответ 1



Учи java Swing, тебе этого будет достаточно, что бы сделать интерфейс, правила игры, смотри в другом месте, если делать игру - не примитивной, камни, фишки и тд, надо будет нарисовать или стырить =)

Работа с БД при помощи JPA 2

#jpa #java

                    
Здравствуйте. Помогите, пожалуйста, разобраться, JPA 2.
Вопрос вот в чем: 

Допустим, у меня есть некоторый класс, работающий с БД. Разные объекты его создают,
используют и т.д. Чтобы не было много "мертвых" подключений, их постоянно надо закрывать.
EntityManagerFactory emf = Persistence.createEntityManagerFactory("commonStorage");
EntityManager em = emf.createEntityManager();
// операции
em.close();
emf.close();

Но создание нового EntityManager занимает время. Может, есть что-то, что я упустил?
Может, надо использовать один EntityManagerFactory на все приложение? Или другие варианты.    


Ответы

Ответ 1



Да, EntityManagerFactory тяжеловесный объект и не стоит его создавать при каждом запросе. Лучше использовать стратегию - один EntityManager на один запрос.